#include "kernel/types.h"
#include "user.h"

#define MAXSIZE 10

int main(int argc,char* argv[]){
    //检查参数数量是否正确
    if(argc != 1){
        printf("pingpong needs not argument!\n"); 
        exit(-1);
    }

    // 管道消息
    char msg[MAXSIZE];

    // 创建两个pipe
    int p1[2],p2[2];
    pipe(p1);
    pipe(p2);

    // 创建一个进程
    int pid = fork();

    // fork失败
    if(pid < 0){
        printf("failed to fork!\n");
        exit(-1);
    }
    // 如果父进程正在运行
    else if(pid > 0){
        // 关闭不必要的管道
        close(p1[0]);
        close(p2[1]);

        // 父进程向管道1写入ping
        write(p1[1], "ping", MAXSIZE);


        // 父进程读取管道2内容并打印
        read(p2[0], msg, MAXSIZE);
        printf("%d: received %s\n", getpid(), msg);
        
        // 关闭使用完毕的管道
        close(p1[1]);
        close(p2[0]);
    }
    // 如果子进程正在运行
    else{
        // 关闭不必要的管道
        close(p1[1]);
        close(p2[0]);

        // 子进程读取管道1内容并打印
        read(p1[0], msg, MAXSIZE);
        printf("%d: received %s\n", getpid(), msg);
        
        // 子进程向管道2写入pong
        write(p2[1], "pong", MAXSIZE);

        // 关闭使用完毕的管道
        close(p1[0]);
        close(p2[1]);
    }
    exit(0); //确保进程退出
}
